package com.liu.ibatis;

import java.util.Map;

/**
 * @Author liuzq
 * @Date 2024/2/23 10:18
 * @Description TODO
 * 通过MyBatis环境等配置信息构造SqlSessionFactory（会话工厂）。
 * 它的主要功能是创建SqlSession对象，和SqlSessionFactoryBuilder对象一样，没有必要每次访问Mybatis就创建一次SqlSessionFactory，
 * 通常的做法是创建一个全局的对象就可以了。SqlSessionFactory对象一个必要的属性是Configuration对象，
 * 它是保存Mybatis全局配置的一个配置对象，通常由SqlSessionFactoryBuilder从XML配置文件创建。
 */
public class SqlSessionFactory {

    /**
     * 事务管理器
     */
    private Transaction transaction;


    /**
     *  mappedStatements 是⼀个HashMap，存储时key =全限定类名+⽅法名，value =对应的MappedStatement对象
     */
    private Map<String,MapperStatement> mapStatements;


    public SqlSessionFactory(Transaction transaction, Map<String, MapperStatement> mapStatements) {
        this.transaction = transaction;
        this.mapStatements = mapStatements;
    }

    public SqlSession openSession(){
        transaction.openConnection();

        return new SqlSession(this);
    }


    public Transaction getTransaction() {
        return transaction;
    }

    public void setTransaction(Transaction transaction) {
        this.transaction = transaction;
    }

    public Map<String, MapperStatement> getMapStatements() {
        return mapStatements;
    }

    public void setMapStatements(Map<String, MapperStatement> mapStatements) {
        this.mapStatements = mapStatements;
    }
}
